/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package model;

import components.Database;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import javax.swing.JOptionPane;
/**
 *
 * @author tomkeim
 * 
 * 
 * Speler(Spelerid, naam, adres, postcode, woonplaat, telefoonnr, emailadres,  rating)
 * 
 */
public class Speler {
    private int spelerID;
    private String naam;
    private String adres;
    private String postcode;
    private String email;
    private String woonplaats;
    private String telefoonNummer;
    private double rating;
    private boolean isGeblokkeerd;
    
    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    
    
    public Speler() {
        
    }

    public String getAdres() {
        return adres;
    }

    public void setAdres(String adres) {
        this.adres = adres;
    }

    public String getNaam() {
        return naam;
    }

    public void setNaam(String naam) {
        this.naam = naam;
    }

    public String getPostcode() {
        return postcode;
    }

    public void setPostcode(String postcode) {
        this.postcode = postcode;
    }

    public double getRating() {
        return rating;
    }

    public void setRating(double rating) {
        this.rating = rating;
    }

    public int getSpelerid() {
        return spelerID;
    }

    public void setSpelerid(int spelerid) {
        this.spelerID = spelerid;
    }

    public String getTelefoonNummer() {
        return telefoonNummer;
    }

    public void setTelefoonNummer(String telefoonNummer) {
        this.telefoonNummer = telefoonNummer;
    }

    public String getWoonplaats() {
        return woonplaats;
    }

    public void setWoonplaats(String woonplaats) {
        this.woonplaats = woonplaats;
    }

    public boolean isIsGeblokkeerd() {
        return this.isGeblokkeerd;
    }

    public void setIsGeblokkeerd(boolean isGeblokkeerd) {
        this.isGeblokkeerd = isGeblokkeerd;
    }

    public int getSpelerID() {
        return spelerID;
    }

    public void setSpelerID(int spelerID) {
        this.spelerID = spelerID;
    }

  
    
    
    public static Speler getSpeler(int id) {
        
        
        Speler newSpeler = new Speler();
        
        String query = "SELECT * FROM Speler WHERE spelerid = " + id;
        
        ResultSet result = Database.executeSelectQuery(query);
        
        try {
            result.next();
            
            newSpeler.setSpelerid(result.getInt("spelerid"));
            newSpeler.setNaam(result.getString("naam"));
            newSpeler.setAdres(result.getString("adres"));
            newSpeler.setPostcode(result.getString("postcode"));
            newSpeler.setWoonplaats(result.getString("woonplaats"));
            newSpeler.setTelefoonNummer(result.getString("telefoonnr"));
            newSpeler.setEmail(result.getString("emailadres"));
            newSpeler.setRating(result.getInt("rating"));
            newSpeler.setIsGeblokkeerd(result.getBoolean("is_geblokkeerd"));
            
        } catch(SQLException e) {
            
        }
        
        
        return newSpeler;
    }
    
    public static Speler getSpeler(String naam) {
        
        
        Speler newSpeler = new Speler();
        
        String query = "SELECT * FROM Speler WHERE naam = '" + naam + "'";
        
        ResultSet result = Database.executeSelectQuery(query);
        
        try {
            result.next();
            
            newSpeler.setSpelerid(result.getInt("spelerid"));
            newSpeler.setNaam(result.getString("naam"));
            newSpeler.setAdres(result.getString("adres"));
            newSpeler.setPostcode(result.getString("postcode"));
            newSpeler.setWoonplaats(result.getString("woonplaats"));
            newSpeler.setTelefoonNummer(result.getString("telefoonnr"));
            newSpeler.setEmail(result.getString("emailadres"));
            newSpeler.setRating(result.getInt("rating"));
            
        } catch(SQLException e) {
            
        }
        
        
        return newSpeler;
    }
    
public static boolean getSpelerEmail(String email) {
    boolean count = false;
    Speler newSpeler = new Speler();
    String query = "SELECT * FROM Speler WHERE emailadres = '" + email + "'";
    ResultSet result = Database.executeSelectQuery(query);
     try {
         while (result.next()) {
                         newSpeler.setSpelerid(result.getInt("spelerid"));
            newSpeler.setNaam(result.getString("naam"));
            newSpeler.setAdres(result.getString("adres"));
            newSpeler.setPostcode(result.getString("postcode"));
            newSpeler.setWoonplaats(result.getString("woonplaats"));
            newSpeler.setTelefoonNummer(result.getString("telefoonnr"));
            newSpeler.setEmail(result.getString("emailadres"));
            newSpeler.setRating(result.getInt("rating"));
            count = true;
         } }
         catch(SQLException e) {
            
        }
        
        
        return count;
     }
    
 public static boolean exists(int id) {
           boolean count = false;
        Speler newSpeler = new Speler();
        
        String query = "SELECT * FROM Speler WHERE spelerid = " + id;
        
        ResultSet result = Database.executeSelectQuery(query);
        
        try {
            result.next();
           
                newSpeler.setSpelerid(result.getInt("spelerid"));
                newSpeler.setNaam(result.getString("naam"));
                newSpeler.setAdres(result.getString("adres"));
                newSpeler.setPostcode(result.getString("postcode"));
                newSpeler.setWoonplaats(result.getString("woonplaats"));
                newSpeler.setTelefoonNummer(result.getString("telefoonnr"));
                newSpeler.setEmail(result.getString("emailadres"));
                newSpeler.setRating(result.getInt("rating"));
                newSpeler.setIsGeblokkeerd(result.getBoolean("is_geblokkeerd"));
            count = true;
            
        } catch(SQLException e) {
            //Error afhandeling
               System.out.println(e.getMessage());
        }
        
        // Note by : Ik weet  dat dit waarschijnlijk een ver van perfecte methode is, maar we hebben alvast iets nu. Suggesties zijn uiteraard welkom.
        return count;
            }
      

    
public static Speler[] getSpelersNietBetaald() {
        ArrayList<Speler> spelers = new ArrayList<Speler>();
        Speler newSpeler;
        String query = "SELECT * FROM Speler WHERE Betaald is NULL";
        ResultSet result = Database.executeSelectQuery(query);
        try {
            while(result.next()) {
                newSpeler = new Speler();
                
                newSpeler.setSpelerid(result.getInt("spelerid"));
                newSpeler.setNaam(result.getString("naam"));
                newSpeler.setAdres(result.getString("adres"));
                newSpeler.setPostcode(result.getString("postcode"));
                newSpeler.setWoonplaats(result.getString("woonplaats"));
                newSpeler.setTelefoonNummer(result.getString("telefoonnr"));
                newSpeler.setEmail(result.getString("emailadres"));
                newSpeler.setRating(result.getInt("rating"));
                newSpeler.setIsGeblokkeerd(result.getBoolean("is_geblokkeerd"));
                
                
               spelers.add(newSpeler);
            }
        } catch(SQLException e) {
            System.out.println(e.getMessage());
        }
        Speler[] spelersArray = new Speler[spelers.size()];
        for(int i=0;i<spelers.size();i++) {
            spelersArray[i] = spelers.get(i);
        }
        
        return spelersArray;
    }
    
    
    
    public static Speler[] getSpelers() {
        ArrayList<Speler> spelers = new ArrayList<Speler>();
        Speler newSpeler;
        String query = "SELECT * FROM Speler";
        ResultSet result = Database.executeSelectQuery(query);
        try {
            while(result.next()) {
                newSpeler = new Speler();
                
                newSpeler.setSpelerid(result.getInt("spelerid"));
                newSpeler.setNaam(result.getString("naam"));
                newSpeler.setAdres(result.getString("adres"));
                newSpeler.setPostcode(result.getString("postcode"));
                newSpeler.setWoonplaats(result.getString("woonplaats"));
                newSpeler.setTelefoonNummer(result.getString("telefoonnr"));
                newSpeler.setEmail(result.getString("emailadres"));
                newSpeler.setRating(result.getInt("rating"));
                newSpeler.setIsGeblokkeerd(result.getBoolean("is_geblokkeerd"));
                
               spelers.add(newSpeler);
            }
        } catch(SQLException e) {
            System.out.println(e.getMessage());
        }
        Speler[] spelersArray = new Speler[spelers.size()];
        for(int i=0;i<spelers.size();i++) {
            spelersArray[i] = spelers.get(i);
        }
        
        return spelersArray;
    }
     public boolean delete() {
    boolean successful = false;
    String query = "DELETE from Speler where spelerid ='" + this.spelerID + "'";
    if (Database.executeDeleteQuery(query) == 1){
        // er is 1 record verwijderd
        successful = true;
    }
    return successful;
    }
    
       public boolean insert() {
    boolean successful = false;
      //sla dit Docent object op in de database, 
      //mbv  executeInsertQuery uit componenten.Database
      String query = "Insert into Speler (naam, adres, postcode, woonplaats, telefoonnr, emailadres, rating) values('" +
              this.naam + "', '" +
              this.adres + "', '" +
              this.postcode + "', '" +
              this.woonplaats + "', '" +
              this.telefoonNummer + "', '" +
              this.email + "', '" +
              this.rating + "')";
              
      
        if (Database.executeInsertQuery(query) > 0) { 
            //tenminste 1 record inserted
              successful = true;
        }
    return successful;
  }
    @Override
    public String toString() {
        String output = this.getNaam() + " ("+this.getEmail()+")";
        return output;
    }
    
/*    private boolean veldIngevult() {
        if(email == null) {
            JOptionPane.showMessageDialog(null, "niet alle velden zijn ingevuld", "warning", JOptionPane.ERROR_MESSAGE);
            return false;
        }
        return true;
    }*/
    
    public boolean update() {
        String query = "UPDATE Speler SET "
                + "naam='" + naam 
                + "',adres='" + adres 
                + "',postcode='" + postcode
                + "',woonplaats='" + woonplaats
                + "',telefoonnr= '" + telefoonNummer
                + "',emailadres='" + email
                + "',rating=" + rating + " where spelerid = " + this.spelerID;
        if (Database.executeUpdateQuery(query) == 1){
            return true;
        }
        return false;
    }

   public boolean blokkeer() {
        String query = "UPDATE Speler SET "
                     + "is_geblokkeerd =" + (boolean)this.isIsGeblokkeerd() + " where spelerid = '" + this.getSpelerid() + "'";
        if (Database.executeUpdateQuery(query) == 1){
            return true;
        }
        return false;
    }
   
   public void lowerRating(double bedrag){
       if((this.getRating() - bedrag) < 0) {
           this.setRating(0);
       } else {
        this.setRating(this.getRating() - bedrag);
       }
   }
   
   public void higherRating(double bedrag){
       this.setRating(this.getRating() + bedrag);
   }
}
